package com.aoxon.cargo.loader;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;

import com.aoxon.cargo.state.MyStateUtil;
import com.aoxon.cargo.util.EnvironmentUtil;
import com.aoxon.cargo.util.ExecutorUtil;
import com.aoxon.cargo.util.ToastUtil;

/**
 * 一般数据的加载
 * 
 * @author ZZJ
 * 
 */
public class NormalDataLoader {

	private boolean cancle = false; // 是否取消加载所有加载中的线程
	private boolean stop = false; //停止当前的线程
	private boolean isLoading = false; // 是否正在加载中
	private Activity activity = null;
	private OnLoadDataListener onloadDataListener = null; // 各阶段要执行的接口

	public NormalDataLoader(Activity activity) {
		this.activity = activity;
	}

	/**
	 * 是否取消加载所有加载中的线程
	 * 
	 * @param cancle
	 */
	public void cancle(boolean cancle) {
		this.cancle = cancle;
	}
	public boolean getCancle(){
		return cancle;
	}

	/**
	 * 停止当前的线程
	 */
	public void stop(boolean stop){
		this.stop = stop;
	}
	public boolean getStop(){
		return stop;
	}
	
	
	/**
	 * 设置加载状态
	 * 
	 * @param isLoading
	 */
	public void loading(boolean isLoading) {
		this.isLoading = isLoading;
	}

	public boolean getLoading() {
		return isLoading;
	}
	
	
	public Handler getHandler(){
		return this.handler;
	}
	
	/**
	 * 加载数据
	 */
	public void load() {
		if (isLoading || cancle) {
			// 防止多次加载，数据混淆
			return;
		}
		onloadDataListener.beforeLoad();// 加载前要执行的操作

		ExecutorUtil.getCachedExecutorService().submit(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				if (isLoading || cancle || stop) {
					// 防止多次加载，数据混淆
					isLoading = false;
					stop = false;
					return;
				}
				Message msg = new Message();
				if (true) {
					try {
						onloadDataListener.toLoad(msg); // 要执行的异步加载操作
					} catch (Exception e) {
						e.printStackTrace();
						msg.what = MyStateUtil.ERROR_NET_CONNECTION;
					}
				} else {
					msg.what = MyStateUtil.NOT_NET_CONNECTION;
				}
				handler.sendMessage(msg);
			}
		});

	}

	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if (msg.what == MyStateUtil.ERROR_NET_CONNECTION) {
				ToastUtil.show(activity, "网络连接异常");
			}
//			if(stop){
//				stop = false;
//				return ;
//			}
			onloadDataListener.afterLoad(msg.what);// 加载完成要执行的操作
			isLoading = false;
			super.handleMessage(msg);
		}
	};

	/**
	 * 设置监听
	 * 
	 * @param onloadDataListener
	 */
	public void setOnloadDataListener(OnLoadDataListener onloadDataListener) {
		this.onloadDataListener = onloadDataListener;
	}

	/**
	 * 各阶段要执行的操作的接口
	 * 
	 * @author ZZJ
	 * 
	 */
	public interface OnLoadDataListener {
		/**
		 * 加载前要执行的操作
		 */
		public void beforeLoad();

		/**
		 * 要执行的异步加载操作
		 */
		public void toLoad(Message msg) throws Exception;

		/**
		 * 加载完成要执行的操作
		 */
		public void afterLoad(int state);
	}
}
